package com.hmdp.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RedissonConfig {

    /**
     * 配置 RedissonClient 实例
     * 支持单机、集群、哨兵等模式，根据实际场景选择
     */
    @Bean(destroyMethod = "shutdown") // 容器销毁时关闭 Redisson 连接
    public RedissonClient redissonClient() {
        // 1. 创建配置对象
        Config config = new Config();

        // 2. 配置 Redis 连接模式（选择以下一种）

        // ====== 单机模式（常用）======
        SingleServerConfig singleServerConfig = config.useSingleServer();
        singleServerConfig.setAddress("redis://127.0.0.1:6379"); // Redis 地址（格式：redis://ip:port）
        //singleServerConfig.setPassword("your_redis_password"); // Redis 密码（无密码则省略）
        singleServerConfig.setDatabase(0); // 选择数据库（默认0）

        // 高级参数配置（可选）
        singleServerConfig.setConnectionMinimumIdleSize(5); // 最小空闲连接数，默认10
        singleServerConfig.setConnectionPoolSize(10); // 连接池最大容量，默认64
        singleServerConfig.setIdleConnectionTimeout(10000); // 空闲连接超时时间（毫秒），默认10000
        singleServerConfig.setConnectTimeout(3000); // 连接超时时间（毫秒），默认10000
        singleServerConfig.setTimeout(3000); // 命令执行超时时间（毫秒），默认3000


        // ====== 集群模式（Redis Cluster）======
        // 适用于 Redis 集群部署（至少3主3从）
        // config.useClusterServers()
        //       .addNodeAddress(
        //           "redis://127.0.0.1:7001",
        //           "redis://127.0.0.1:7002",
        //           "redis://127.0.0.1:7003"
        //       )
        //       .setPassword("your_redis_password")
        //       .setScanInterval(2000); // 集群节点扫描间隔（毫秒）


        // ====== 哨兵模式（Redis Sentinel）======
        // 适用于主从+哨兵架构
        // config.useSentinelServers()
        //       .setMasterName("mymaster") // 主节点名称
        //       .addSentinelAddress(
        //           "redis://127.0.0.1:26379",
        //           "redis://127.0.0.1:26380"
        //       )
        //       .setPassword("your_redis_password");


        // 3. 根据配置创建 RedissonClient 实例
        return Redisson.create(config);
    }
}